#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

class GameAI
{
public:
    void collectResources()
    {
       std::cout<<"call buildStructures and buildUnits"<<std::endl;
       buildStructures();
       buildUnits();
    }
    virtual void buildStructures() = 0;
    virtual void buildUnits() = 0;
    virtual void sendScouts(int position) = 0;
    virtual void sendWarriors(int position) = 0;
};

class OrcsAI : public GameAI
{
public:
    void buildStructures() override
    {
        std::cout<<"OrcsAI buildStructures"<<std::endl;
    }

    void buildUnits() override
    {
        std::cout<<"OrcsAI buildUnits"<<std::endl;
    }
    void sendScouts(int position) override
    {
        std::cout<<"OrcsAI sendScouts"<<std::endl;
    }
    void sendWarriors(int position) override
    {
        std::cout<<"OrcsAI sendWarriors"<<std::endl;
    }
};

class MonsterAI : public GameAI
{
public:
    void buildStructures() override
    {
        std::cout<<"MonsterAI buildStructures"<<std::endl;
    }

    void buildUnits() override
    {
        std::cout<<"MonsterAI buildUnits"<<std::endl;
    }
    void sendScouts(int position) override
    {
        std::cout<<"MonsterAI sendScouts"<<std::endl;
    }
    void sendWarriors(int position) override
    {
        std::cout<<"MonsterAI sendWarriors"<<std::endl;
    }
};

int main() {
    GameAI* monster_ai = new MonsterAI();
    GameAI* orcs_ai    = new OrcsAI();
    monster_ai->collectResources();
    orcs_ai->collectResources();
    return 0;
}



